﻿using System;
using System.Collections.Generic;
using System.Text;

namespace deFramework.Common
{
    /// <summary>
    /// .
    /// </summary>
    public class DotNetUtilities
    {


        /// <summary>
        /// 
        /// </summary>
        /// <param name="listColumnsCommaSeparated"></param>
        /// <returns></returns>
        public static System.Data.DataTable NewEmptyTable(string listColumnsCommaSeparated)
        {
            System.Data.DataTable result = new System.Data.DataTable();
            string[] fieldNames = listColumnsCommaSeparated.Split(',');
            foreach (string fieldName in fieldNames)
            {
                result.Columns.Add(new System.Data.DataColumn(fieldName));
            }

            return result;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="listColumnsCommaSeparated"></param>
        /// <param name="sourceTable"></param>
        /// <returns></returns>
        public static System.Data.DataTable MapDataTableToNewEmptyTable(
            string listColumnsCommaSeparated, ref System.Data.DataTable sourceTable) 
        {
            System.Data.DataTable destTable = NewEmptyTable(listColumnsCommaSeparated);
            if (!(sourceTable == null))
            foreach (System.Data.DataRow row in sourceTable.Rows)
            {
                System.Data.DataRow destRow = destTable.NewRow();
                foreach (System.Data.DataColumn col in destTable.Columns)
                {
                    try
                    {
                        destRow[col.ColumnName] = row[col.ColumnName]; 
                    }
                    catch { } 
                }
                destTable.Rows.Add(destRow); 
            }
            return destTable; 
        }


        /// <summary>
        /// 
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public static string Base64Encode(string data)
        {
            try
            {
                byte[] encData_byte = new byte[data.Length];
                encData_byte = System.Text.Encoding.UTF8.GetBytes(data);
                string encodedData = Convert.ToBase64String(encData_byte);
                return encodedData;
            }
            catch (Exception e)
            {
                throw new Exception("Error in base64Encode" + e.Message);
            }
        }



        /// <summary>
        /// 
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public static string Base64Decode(string data)
        {
            try
            {
                System.Text.UTF8Encoding encoder = new System.Text.UTF8Encoding();
                System.Text.Decoder utf8Decode = encoder.GetDecoder();

                byte[] todecode_byte = Convert.FromBase64String(data);
                int charCount = utf8Decode.GetCharCount(todecode_byte, 0, todecode_byte.Length);
                char[] decoded_char = new char[charCount];
                utf8Decode.GetChars(todecode_byte, 0, todecode_byte.Length, decoded_char, 0);
                string result = new String(decoded_char);
                return result;
            }
            catch (Exception e)
            {
                throw new Exception("Error in base64Decode" + e.Message);
            }
        }

    }
}
